home *** CD-ROM | disk | FTP | other *** search
- package java.net;
-
- import java.io.IOException;
- import java.io.ObjectStreamException;
- import java.io.Serializable;
- import java.net.InetAddress.Cache.Type;
- import java.security.AccessController;
- import java.security.PrivilegedActionException;
- import java.util.HashMap;
- import sun.net.spi.nameservice.NameService;
- import sun.net.util.IPAddressUtil;
- import sun.security.action.GetBooleanAction;
- import sun.security.action.GetPropertyAction;
- import sun.security.action.LoadLibraryAction;
-
- public class InetAddress implements Serializable {
- static final int IPv4 = 1;
- static final int IPv6 = 2;
- static transient boolean preferIPv6Address = false;
- String hostName;
- int address;
- int family;
- private static NameService nameService = null;
- private transient String canonicalHostName = null;
- private static final long serialVersionUID = 3286316764910316507L;
- private static Cache addressCache;
- private static Cache negativeCache;
- private static boolean addressCacheInit;
- static InetAddress[] unknown_array;
- static InetAddressImpl impl;
- private static HashMap lookupTable;
-
- InetAddress() {
- }
-
- private Object readResolve() throws ObjectStreamException {
- return new Inet4Address(this.hostName, this.address);
- }
-
- public boolean isMulticastAddress() {
- return false;
- }
-
- public boolean isAnyLocalAddress() {
- return false;
- }
-
- public boolean isLoopbackAddress() {
- return false;
- }
-
- public boolean isLinkLocalAddress() {
- return false;
- }
-
- public boolean isSiteLocalAddress() {
- return false;
- }
-
- public boolean isMCGlobal() {
- return false;
- }
-
- public boolean isMCNodeLocal() {
- return false;
- }
-
- public boolean isMCLinkLocal() {
- return false;
- }
-
- public boolean isMCSiteLocal() {
- return false;
- }
-
- public boolean isMCOrgLocal() {
- return false;
- }
-
- public boolean isReachable(int var1) throws IOException {
- return this.isReachable((NetworkInterface)null, 0, var1);
- }
-
- public boolean isReachable(NetworkInterface var1, int var2, int var3) throws IOException {
- if (var2 < 0) {
- throw new IllegalArgumentException("ttl can't be negative");
- } else if (var3 < 0) {
- throw new IllegalArgumentException("timeout can't be negative");
- } else {
- return impl.isReachable(this, var3, var1, var2);
- }
- }
-
- public String getHostName() {
- return this.getHostName(true);
- }
-
- String getHostName(boolean var1) {
- if (this.hostName == null) {
- this.hostName = getHostFromNameService(this, var1);
- }
-
- return this.hostName;
- }
-
- public String getCanonicalHostName() {
- if (this.canonicalHostName == null) {
- this.canonicalHostName = getHostFromNameService(this, true);
- }
-
- return this.canonicalHostName;
- }
-
- private static String getHostFromNameService(InetAddress var0, boolean var1) {
- String var2;
- try {
- var2 = nameService.getHostByAddr(var0.getAddress());
- if (var1) {
- SecurityManager var3 = System.getSecurityManager();
- if (var3 != null) {
- var3.checkConnect(var2, -1);
- }
- }
-
- InetAddress[] var9 = getAllByName0(var2, var1);
- boolean var4 = false;
- if (var9 != null) {
- for(int var5 = 0; !var4 && var5 < var9.length; ++var5) {
- var4 = var0.equals(var9[var5]);
- }
- }
-
- if (!var4) {
- var2 = var0.getHostAddress();
- return var2;
- }
- } catch (SecurityException var6) {
- var2 = var0.getHostAddress();
- } catch (UnknownHostException var7) {
- var2 = var0.getHostAddress();
- }
-
- return var2;
- }
-
- public byte[] getAddress() {
- return null;
- }
-
- public String getHostAddress() {
- return null;
- }
-
- public int hashCode() {
- return -1;
- }
-
- public boolean equals(Object var1) {
- return false;
- }
-
- public String toString() {
- return (this.hostName != null ? this.hostName : "") + "/" + this.getHostAddress();
- }
-
- private static void cacheInitIfNeeded() {
- assert Thread.holdsLock(addressCache);
-
- if (!addressCacheInit) {
- unknown_array = new InetAddress[1];
- unknown_array[0] = impl.anyLocalAddress();
- addressCache.put(impl.anyLocalAddress().getHostName(), unknown_array);
- addressCacheInit = true;
- }
- }
-
- private static void cacheAddress(String var0, Object var1, boolean var2) {
- var0 = var0.toLowerCase();
- synchronized(addressCache) {
- cacheInitIfNeeded();
- if (var2) {
- addressCache.put(var0, var1);
- } else {
- negativeCache.put(var0, var1);
- }
-
- }
- }
-
- private static Object getCachedAddress(String var0) {
- var0 = var0.toLowerCase();
- synchronized(addressCache) {
- cacheInitIfNeeded();
- CacheEntry var2 = addressCache.get(var0);
- if (var2 == null) {
- var2 = negativeCache.get(var0);
- }
-
- return var2 != null ? var2.address : null;
- }
- }
-
- public static InetAddress getByAddress(String var0, byte[] var1) throws UnknownHostException {
- if (var0 != null && var0.length() > 0 && var0.charAt(0) == '[' && var0.charAt(var0.length() - 1) == ']') {
- var0 = var0.substring(1, var0.length() - 1);
- }
-
- if (var1 != null) {
- if (var1.length == 4) {
- return new Inet4Address(var0, var1);
- }
-
- if (var1.length == 16) {
- byte[] var2 = IPAddressUtil.convertFromIPv4MappedAddress(var1);
- if (var2 != null) {
- return new Inet4Address(var0, var2);
- }
-
- return new Inet6Address(var0, var1);
- }
- }
-
- throw new UnknownHostException("addr is of illegal length");
- }
-
- public static InetAddress getByName(String var0) throws UnknownHostException {
- return getAllByName(var0)[0];
- }
-
- public static InetAddress[] getAllByName(String var0) throws UnknownHostException {
- if (var0 != null && var0.length() != 0) {
- boolean var6 = false;
- if (var0.charAt(0) == '[') {
- if (var0.length() <= 2 || var0.charAt(var0.length() - 1) != ']') {
- throw new UnknownHostException(var0);
- }
-
- var0 = var0.substring(1, var0.length() - 1);
- var6 = true;
- }
-
- if (Character.digit(var0.charAt(0), 16) == -1 && var0.charAt(0) != ':') {
- if (var6) {
- throw new UnknownHostException("[" + var0 + "]");
- }
- } else {
- Object var2 = null;
- int var3 = -1;
- String var4 = null;
- byte[] var7 = IPAddressUtil.textToNumericFormatV4(var0);
- if (var7 == null) {
- int var5;
- if ((var5 = var0.indexOf("%")) != -1) {
- var3 = checkNumericZone(var0);
- if (var3 == -1) {
- var4 = var0.substring(var5 + 1);
- }
- }
-
- var7 = IPAddressUtil.textToNumericFormatV6(var0);
- } else if (var6) {
- throw new UnknownHostException("[" + var0 + "]");
- }
-
- InetAddress[] var8 = new InetAddress[1];
- if (var7 != null) {
- if (var7.length == 4) {
- var8[0] = new Inet4Address((String)null, var7);
- } else if (var4 != null) {
- var8[0] = new Inet6Address((String)null, var7, var4);
- } else {
- var8[0] = new Inet6Address((String)null, var7, var3);
- }
-
- return var8;
- }
- }
-
- return getAllByName0(var0);
- } else {
- InetAddress[] var1 = new InetAddress[]{impl.loopbackAddress()};
- return var1;
- }
- }
-
- private static int checkNumericZone(String var0) throws UnknownHostException {
- int var1 = var0.indexOf(37);
- int var2 = var0.length();
- int var4 = 0;
- if (var1 == -1) {
- return -1;
- } else {
- for(int var5 = var1 + 1; var5 < var2; ++var5) {
- char var6 = var0.charAt(var5);
- if (var6 == ']') {
- if (var5 == var1 + 1) {
- return -1;
- }
- break;
- }
-
- int var3;
- if ((var3 = Character.digit(var6, 10)) < 0) {
- return -1;
- }
-
- var4 = var4 * 10 + var3;
- }
-
- return var4;
- }
- }
-
- private static InetAddress[] getAllByName0(String var0) throws UnknownHostException {
- return getAllByName0(var0, true);
- }
-
- static InetAddress[] getAllByName0(String var0, boolean var1) throws UnknownHostException {
- Object var2 = null;
- Object var3 = null;
- if (var1) {
- SecurityManager var4 = System.getSecurityManager();
- if (var4 != null) {
- var4.checkConnect(var0, -1);
- }
- }
-
- var2 = getCachedAddress(var0);
- if (var2 == null) {
- var2 = getAddressFromNameService(var0);
- }
-
- if (var2 == unknown_array) {
- throw new UnknownHostException(var0);
- } else {
- var3 = ((InetAddress[])((InetAddress[])var2)).clone();
- return (InetAddress[])var3;
- }
- }
-
- private static Object getAddressFromNameService(String var0) throws UnknownHostException {
- Object var1 = null;
- boolean var2 = false;
- if ((var1 = checkLookupTable(var0)) == null) {
- try {
- var1 = nameService.lookupAllHostAddr(var0);
- var2 = true;
- } catch (UnknownHostException var8) {
- if (!var0.equalsIgnoreCase("localhost")) {
- var1 = unknown_array;
- var2 = false;
- throw var8;
- }
-
- InetAddress[] var4 = new InetAddress[]{impl.loopbackAddress()};
- var1 = var4;
- var2 = true;
- } finally {
- cacheAddress(var0, var1, var2);
- updateLookupTable(var0);
- }
- }
-
- return var1;
- }
-
- private static Object checkLookupTable(String var0) {
- Object var1 = null;
- synchronized(lookupTable) {
- if (!lookupTable.containsKey(var0)) {
- lookupTable.put(var0, (Object)null);
- return var1;
- }
-
- while(lookupTable.containsKey(var0)) {
- try {
- lookupTable.wait();
- } catch (InterruptedException var7) {
- }
- }
- }
-
- var1 = getCachedAddress(var0);
- if (var1 == null) {
- synchronized(lookupTable) {
- lookupTable.put(var0, (Object)null);
- }
- }
-
- return var1;
- }
-
- private static void updateLookupTable(String var0) {
- synchronized(lookupTable) {
- lookupTable.remove(var0);
- lookupTable.notifyAll();
- }
- }
-
- public static InetAddress getByAddress(byte[] var0) throws UnknownHostException {
- return getByAddress((String)null, var0);
- }
-
- public static InetAddress getLocalHost() throws UnknownHostException {
- SecurityManager var0 = System.getSecurityManager();
-
- try {
- String var1 = impl.getLocalHostName();
- if (var0 != null) {
- var0.checkConnect(var1, -1);
- }
-
- if (var1.equals("localhost")) {
- return impl.loopbackAddress();
- } else {
- InetAddress[] var2;
- try {
- var2 = (InetAddress[])getAddressFromNameService(var1);
- } catch (UnknownHostException var4) {
- throw new UnknownHostException(var1 + ": " + var4.getMessage());
- }
-
- return var2[0];
- }
- } catch (SecurityException var5) {
- return impl.loopbackAddress();
- }
- }
-
- private static native void init();
-
- static InetAddress anyLocalAddress() {
- return impl.anyLocalAddress();
- }
-
- static Object loadImpl(String var0) {
- String var2 = (String)AccessController.doPrivileged(new GetPropertyAction("impl.prefix", ""));
- Object var1 = null;
-
- try {
- var1 = Class.forName("java.net." + var2 + var0).newInstance();
- } catch (ClassNotFoundException var5) {
- System.err.println("Class not found: java.net." + var2 + var0 + ":\ncheck impl.prefix property " + "in your properties file.");
- } catch (InstantiationException var6) {
- System.err.println("Could not instantiate: java.net." + var2 + var0 + ":\ncheck impl.prefix property " + "in your properties file.");
- } catch (IllegalAccessException var7) {
- System.err.println("Cannot access class: java.net." + var2 + var0 + ":\ncheck impl.prefix property " + "in your properties file.");
- }
-
- if (var1 == null) {
- try {
- var1 = Class.forName(var0).newInstance();
- } catch (Exception var4) {
- throw new Error("System property impl.prefix incorrect");
- }
- }
-
- return var1;
- }
-
- // $FF: synthetic method
- static NameService access$002(NameService var0) {
- nameService = var0;
- return var0;
- }
-
- static {
- preferIPv6Address = (Boolean)AccessController.doPrivileged(new GetBooleanAction("java.net.preferIPv6Addresses"));
- AccessController.doPrivileged(new LoadLibraryAction("net"));
- init();
- addressCache = new Cache(Type.Positive);
- negativeCache = new Cache(Type.Negative);
- addressCacheInit = false;
- lookupTable = new HashMap();
- new InetAddressImplFactory();
- impl = InetAddressImplFactory.create();
- Object var0 = null;
- String var1 = "sun.net.spi.nameservice.provider.";
- int var2 = 1;
-
- while(nameService == null) {
- String var6 = (String)AccessController.doPrivileged(new GetPropertyAction(var1 + var2, "default"));
- ++var2;
- if (var6.equals("default")) {
- nameService = new 1();
- break;
- }
-
- String var3 = var6;
-
- try {
- AccessController.doPrivileged(new 2(var3));
- } catch (PrivilegedActionException var5) {
- }
- }
-
- }
- }
-